package com.network.retrofit_rx.download;


import com.network.utils.RxBus;

import java.io.IOException;

import okhttp3.MediaType;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
import okio.ForwardingSource;
import okio.Okio;
import okio.Source;

/**
 * Created by QiQi on 2017/8/23.
 */

public class FileResponseBody extends ResponseBody {

    ResponseBody originalResponse;

    public FileResponseBody(ResponseBody originalResponse) {
        this.originalResponse = originalResponse;
    }

    @Override
    public MediaType contentType() {
        return originalResponse.contentType();
    }

    @Override
    public long contentLength() {
        return originalResponse.contentLength();
    }

    @Override
    public BufferedSource source() {
        return Okio.buffer(source(originalResponse.source()));
    }

    private Source source(Source source) {
        return new ForwardingSource(source) {
            long totalBytesRead = 0L;

            @Override
            public long read(Buffer sink, long byteCount) throws IOException {
                long bytesRead = super.read(sink, byteCount);
                // read() returns the number of bytes read, or -1 if this source is exhausted.
                totalBytesRead += bytesRead != -1 ? bytesRead : 0;
                RxBus.getDefault().post(new FileLoadBean(totalBytesRead, contentLength()));
                return bytesRead;
            }
        };
    }


}
